﻿
#include "Engine/common.h"
#include "DNF定义.h"
#include "DNF对象定义.h"

//武器属性分3部分
//1.攻击属性：三攻和四维
//受武器类型，品质，等级影响，和武器系列无关，只需要考虑领域之主，史诗（神40和雾神，没升神的属性低），星团20史诗，太初，星团20太初
//2.附加属性：物理百分比MP增减，物理百分比冷却增减，魔法百分比MP增减，魔法百分比冷却增减，攻速，移速，施放速度，物理暴击，魔法暴击，命中率
//只受武器类型影响，1到110所有武器都一样，如果有武器属性不一样，则是武器自带的额外属性
//百分比MP增减不影响MP鞋
//3.主属性：攻强和技攻，装备描述中的大部分文字
//一般情况下，每个武器系列的属性完全一样
//吞噬本源的最后2个词条在职业大系上有区别，比如剑帝多了10光抗
//CP武器每个职业都不同，技攻和多出来的攻强视为职业专属加成，失衡武器多了雾神属性
//自定义武器多加3攻速，3移速，4.5施放，7暴击，剩下完全由词条提供属性，跨越之忆武器多了雾神属性
//星团等动态属性不直接显示在描述，会根据选择不同，应用不同效果
//其他：只有光杖才有辅助专属属性和辅助专属锻造属性

float 附加属性[武器类型总数][7]={
		//物理冷却 魔法冷却 攻速 移速 施放速度 物理暴击 魔法暴击
		{0,		0,		0,		0,		0,		0,		0},
		{0,		-5,		0,		0,		2,		0,		0},
		{-5,	0,		-5,		0,		5,		0,		2},
		{0,		-5,		0,		0,		0,		0,		0},
		{-5,	-5,		8,		0,		0,		2,		2},
		{5,		-10,	-8,		0,		0,		0,		0},
		{-10,	0,		10,		0,		0,		0,		0},
		{5,		0,		-8,		0,		0,		0,		0},
		{0,		0,		0,		0,		2,		0,		2},
		{-5,	-5,		8,		0,		5,		2,		0},
		{0,		0,		0,		0,		0,		0,		0},
};

float 自定义武器额外加成[7]={0,0,3,3,4.5,7,7};

float 武器物攻表[武器类型总数][拓展品质总数]={
	{0,0,0,0,0,0,0,0,0,0},	//空武器
	{0,0,0,0,0,1229,1344,1356,1394,1406},
	{0,0,0,0,0,1106,1210,1220,1254,1265},
	{0,0,0,0,0,1289,1141,1151,1463,1475},
	{0,0,0,0,0,1167,1277,1288,1324,1335},
	{0,0,0,0,0,1474,1614,1627,1672,1686},
	{0,0,0,0,0,1142,1251,1261,1296,1307},
	{0,0,0,0,0,1474,1614,1627,1672,1686},
	{0,0,0,0,0,1167,1277,1288,1324,1335},
	{0,0,0,0,0,1167,1277,1288,1324,1335},
	{0,0,0,0,0,1351,1478,1492,1533,1546},
};

float 武器魔攻表[武器类型总数][拓展品质总数]={
	{0,0,0,0,0,0,0,0,0,0},	//空武器
	{0,0,0,0,0,1167,1277,1288,1324,1335},
	{0,0,0,0,0,1412,1547,1560,1603,1616},
	{0,0,0,0,0,1106,1210,1220,1254,1265},
	{0,0,0,0,0,1229,1344,1356,1394,1406},
	{0,0,0,0,0,1044,1143,1153,1185,1195},
	{0,0,0,0,0,1106,1210,1220,1254,1265},
	{0,0,0,0,0,1106,1210,1220,1254,1265},
	{0,0,0,0,0,1412,1547,1560,1603,1616},
	{0,0,0,0,0,1289,1411,1423,1463,1475},
	{0,0,0,0,0,1167,1277,1288,1324,1335},
};

float 武器力量表[武器类型总数][拓展品质总数]={
	{0,0,0,0,0,0,0,0,0,0},	//空武器
	{0,0,0,0,0,0,0,0,0,0},
	{0,0,0,0,0,0,0,0,0,0},
	{0,0,0,0,0,122,133,134,138,139},
	{0,0,0,0,0,81,88,89,91,92},
	{0,0,0,0,0,81,88,89,91,92},
	{0,0,0,0,0,81,88,89,91,92},
	{0,0,0,0,0,81,88,89,91,92},
	{0,0,0,0,0,0,0,0,0,0},
	{0,0,0,0,0,81,88,89,91,92},
	{0,0,0,0,0,122,133,134,138,139}
};

float 武器智力表[武器类型总数][拓展品质总数]={
	{0,0,0,0,0,0,0,0,0,0},	//空武器
	{0,0,0,0,0,81,88,89,91,92},
	{0,0,0,0,0,122,133,134,138,139},
	{0,0,0,0,0,0,0,0,0,0},
	{0,0,0,0,0,81,88,89,91,92},
	{0,0,0,0,0,0,0,0,0,0},
	{0,0,0,0,0,0,0,0,0,0},
	{0,0,0,0,0,0,0,0,0,0},
	{0,0,0,0,0,81,88,89,91,92},
	{0,0,0,0,0,122,133,134,138,139},
	{0,0,0,0,0,0,0,0,0,0},
};

float 武器独立表[拓展品质总数]={0,0,0,0,0,766,864,872,911,920};

void DNF武器对象::应用基础属性()
{
	当前角色对象->攻速增加(PC(附加属性[武器类型][2]));
	当前角色对象->移速增加(PC(附加属性[武器类型][3]));
	当前角色对象->施放加速(PC(附加属性[武器类型][4]));
	当前角色对象->物理暴击增加(PC(附加属性[武器类型][5]));
	当前角色对象->魔法暴击增加(PC(附加属性[武器类型][6]));

	if (当前职业对象->是否固伤==FALSE)
	{
		if (当前职业对象->攻击类型==物理攻击类型)
			当前职业对象->技能冷却减少(1,100,-PC(附加属性[武器类型][0]),主动全部技能);
		else if (当前职业对象->攻击类型==魔法攻击类型)
			当前职业对象->技能冷却减少(1,100,-PC(附加属性[武器类型][1]),主动全部技能);
	}

	当前角色对象->物攻增加(武器物攻表[武器类型][品质]);
	当前角色对象->魔攻增加(武器魔攻表[武器类型][品质]);
	当前角色对象->力量增加(武器力量表[武器类型][品质]);
	当前角色对象->智力增加(武器智力表[武器类型][品质]);
	当前角色对象->独立增加(武器独立表[品质]);
}

void DNF武器对象::统计属性()
{
	if (武器系列==怒战之意武器系列)
	{
		当前角色对象->技能范围增加(PC(24));
		当前角色对象->攻速增加(PC(20));
		当前角色对象->移速增加(PC(20));
		当前角色对象->施放加速(PC(30));
	}

	else if (武器系列==冰封之御武器系列)
	{
		当前角色对象->酷寒一击标记=TRUE;
		当前角色对象->异常属性[冰冻].更新频率(3);
		当前角色对象->冰抗增加(15);
		当前角色对象->异抗增加(冰冻,PC(40));
	}
	else if (武器系列==寂灭之信武器系列)
	{
		当前角色对象->异常属性[出血].更新频率(3);
		当前角色对象->异常属性[中毒].更新频率(3);
		当前角色对象->异常属性[灼伤].更新频率(3);
		当前角色对象->异常属性[感电].更新频率(3);
		当前角色对象->全异抗增加(PC(20));
	}
	else if (武器系列==领域之主武器系列)
	{
		当前角色对象->技能范围增加(PC(24));
		当前角色对象->攻速增加(PC(自定义武器额外加成[2]));
		当前角色对象->移速增加(PC(自定义武器额外加成[3]));
		当前角色对象->施放加速(PC(自定义武器额外加成[4]));
		当前角色对象->物理暴击增加(PC(自定义武器额外加成[5]));
		当前角色对象->魔法暴击增加(PC(自定义武器额外加成[6]));

		if (当前角色对象->角色装备词条1[武器]->空装备==FALSE)
			当前角色对象->角色装备词条1[武器]->统计属性();
		if (当前角色对象->角色装备词条2[武器]->空装备==FALSE)
			当前角色对象->角色装备词条2[武器]->统计属性();
		if (当前角色对象->角色装备词条3[武器]->空装备==FALSE)
			当前角色对象->角色装备词条3[武器]->统计属性();
		if (当前角色对象->角色装备词条4[武器]->空装备==FALSE)
			当前角色对象->角色装备词条4[武器]->统计属性();
	}
	else
	{
		统计雾神武器属性();
	}
}

void DNF武器对象::统计雾神武器属性()
{
	if (武器系列==霜_秽染之雪武器系列)
	{
		当前角色对象->酷寒一击标记=TRUE;
	}
	else if (武器系列==跨越之忆武器系列)
	{
		if (当前角色对象->角色装备词条1[武器]->空装备==FALSE)
			当前角色对象->角色装备词条1[武器]->统计属性();
		if (当前角色对象->角色装备词条2[武器]->空装备==FALSE)
			当前角色对象->角色装备词条2[武器]->统计属性();
		if (当前角色对象->角色装备词条3[武器]->空装备==FALSE)
			当前角色对象->角色装备词条3[武器]->统计属性();
		if (当前角色对象->角色装备词条4[武器]->空装备==FALSE)
			当前角色对象->角色装备词条4[武器]->统计属性();
	}

	int 星团类型=武器系列;
	if (武器系列==跨越之忆武器系列)
		星团类型=当前角色对象->跨越之忆星团;
	int 星团等级=当前角色对象->武器星团等级;
	if (星团类型==焰_浴火之厄武器系列)
	{
		if (星团等级==20)
			当前角色对象->技能范围增加(PC(30));
	}
	else if (星团类型==雨_蕴暖之春武器系列)
	{
		if (星团等级>=15)	
			当前角色对象->三速增加(PC(10));
	}
	else if (星团类型==霜_秽染之雪武器系列)
	{
		if (星团等级>=1)	
			当前角色对象->三速增加(PC(10));
	}
	else if (星团类型==风_郁沉之晓武器系列)
	{
		if (星团等级>=5)	
			当前角色对象->三速增加(PC(15));
	}
	else if (星团类型==雷_镌刻之迹武器系列)
	{
		if (星团等级>=1)	
			当前角色对象->三速增加(PC(15));
		if (星团等级>=5)	
			当前角色对象->三速增加(PC(10));
		if (星团等级==20)
			当前角色对象->三速增加(PC(30));
	}
	else if (星团类型==失衡_崩离边界武器系列)
	{
		if (星团等级>=5)	
			当前角色对象->移速增加(PC(15));
		if (星团等级>=10)
		{
			当前角色对象->攻速增加(PC(15));
			当前角色对象->施放加速(PC(15));
		}
	}
}

void DNF武器对象::应用雾神武器属性()
{
	//https://bbs.colg.cn/forum.php?mod=viewthread&tid=9223960
	//固定属性
	if (武器系列==焰_浴火之厄武器系列)
	{
		当前角色对象->攻击强化增加(PC(2142.4));
		当前角色对象->技能伤害提升(PC(116.9));
	}
	else if (武器系列==雨_蕴暖之春武器系列)
	{
		当前角色对象->攻击强化增加(PC(2142.4));
		当前角色对象->技能伤害提升(PC(108));
	}
	else if (武器系列==霜_秽染之雪武器系列)
	{
		当前角色对象->攻击强化增加(PC(2142.4));
		当前角色对象->技能伤害提升(PC(92.5));
		当前职业对象->技能恢复加快(1,100,PC(30),主动非觉醒技能);
	}
	else if (武器系列==风_郁沉之晓武器系列)
	{
		当前角色对象->攻击强化增加(PC(1927.2));
		当前角色对象->技能伤害提升(PC(60.8));
		当前职业对象->技能等级增加(1,100,2,主动全部技能);
		当前职业对象->技能攻击力增加(1,100,PC(30),觉醒技能);
		if (当前职业对象->是否辅助==FALSE)
			当前职业对象->技能冷却减少(1,100,PC(20),觉醒技能);
	}
	else if (武器系列==雷_镌刻之迹武器系列)
	{
		当前角色对象->攻击强化增加(PC(2142.4));
		当前角色对象->技能伤害提升(PC(114.7));
	}
	else if (武器系列==失衡_崩离边界武器系列)
	{
		//含有词条，攻强与成长等级有关，成长倍率不是1.0，适用神40
		当前角色对象->攻击强化增加(PC(204.8),FALSE);
		当前角色对象->技能伤害提升(PC(78.6));
		//继承CP武器的所有属性（攻强技伤除外）
		//技能相关的属性在职业类内处理
		if (当前职业对象->职业==职业_光明骑士女)
		{
			当前角色对象->攻击强化增加(PC(2199.6));
		}
		else if (当前职业对象->职业==职业_流浪武士)
		{
			当前角色对象->攻击强化增加(PC(2538));
			当前角色对象->技能伤害提升(PC(7));
		}
	}
	else if (武器系列==跨越之忆武器系列)
	{
		//含有词条，攻强与成长等级有关，成长倍率不是1.0，适用标70
		当前角色对象->攻击强化增加(PC(100),FALSE);
		当前角色对象->技能伤害提升(PC(78.6));
		//继承红皮武器的所有属性（攻强技伤除外）
		if (当前角色对象->角色装备词条1[武器]->空装备==FALSE)
			当前角色对象->角色装备词条1[武器]->应用属性();
		if (当前角色对象->角色装备词条2[武器]->空装备==FALSE)
			当前角色对象->角色装备词条2[武器]->应用属性();
		if (当前角色对象->角色装备词条3[武器]->空装备==FALSE)
			当前角色对象->角色装备词条3[武器]->应用属性();
		if (当前角色对象->角色装备词条4[武器]->空装备==FALSE)
			当前角色对象->角色装备词条4[武器]->应用属性();
	}


	int 星团类型=武器系列;
	if (武器系列==跨越之忆武器系列)
		星团类型=当前角色对象->跨越之忆星团;
	int 星团等级=当前角色对象->武器星团等级;
	//的星团攻强不受成长等级影响
	当前角色对象->装备攻强成长倍率=1.0f;
	//1,5,10,15,20是增加特效和主属性，其余等级每级+35%攻强
	float 星团等级攻强[20]={0,35,70,105,105, 140,175,210,245,245, 280,315,350,385,385, 420,455,490,525,525};
	当前角色对象->攻击强化增加(PC(星团等级攻强[星团等级-1]));
	//特效伤害和给队友的buff不统计
	//20级有隐藏属性，912更新后，给每种武器都加了2%技伤（公告里冰和风没写）
	//https://dnf.qq.com/cp/a20240912optimize/
	if (星团类型==焰_浴火之厄武器系列)
	{
		float 属性数值=0.0f;
		if (星团等级>=15)	
			属性数值=9;
		else if (星团等级>=10)	
			属性数值=7;
		else if (星团等级>=5)	
			属性数值=5;
		else if (星团等级>=1)	
			属性数值=3;
		当前角色对象->技能伤害提升(PC(属性数值));
		if (星团等级==20)
			当前角色对象->技能伤害提升(PC(5));
	}
	else if (星团类型==雨_蕴暖之春武器系列)
	{
		float 属性数值=0.0f;
		if (星团等级>=15)	
			属性数值=8;
		else if (星团等级>=10)	
			属性数值=6;
		else if (星团等级>=5)	
			属性数值=4;
		else if (星团等级>=1)	
			属性数值=2;
		当前角色对象->技能伤害提升(PC(属性数值));
		if (星团等级>=1)	
			当前角色对象->技能伤害提升(PC(1));
		if (星团等级==20)
			当前角色对象->技能伤害提升(PC(5));
	}
	else if (星团类型==霜_秽染之雪武器系列)
	{
		float 属性数值=0.0f;
		if (星团等级>=15)
			属性数值=41;
		else if (星团等级>=10)
			属性数值=31;
		else if (星团等级>=5)
			属性数值=21;
		else if (星团等级>=1)
			属性数值=11;
		当前职业对象->技能恢复加快(1,100,PC(属性数值),主动非觉醒技能);
		if (星团等级==20)
		{
			当前角色对象->技能伤害提升(PC(2));
			当前职业对象->技能恢复加快(1,100,PC(20),主动非觉醒技能);
		}
	}
	else if (星团类型==风_郁沉之晓武器系列)
	{
		float 属性数值=0.0f;
		if (星团等级>=15)	
			属性数值=31;
		else if (星团等级>=10)	
			属性数值=24;
		else if (星团等级>=5)	
			属性数值=17;
		else if (星团等级>=1)	
			属性数值=10;
		当前职业对象->技能攻击力增加(1,100,PC(属性数值),觉醒技能);
		if (星团等级==20)
		{
			当前角色对象->技能伤害提升(PC(2));
			当前职业对象->技能攻击力增加(1,100,PC(7),觉醒技能);
		}
	}
	else if (星团类型==雷_镌刻之迹武器系列)
	{
		float 属性数值=0.0f;
		if (星团等级>=15)	
			属性数值=9;
		else if (星团等级>=10)	
			属性数值=7;
		else if (星团等级>=5)	
			属性数值=5;
		else if (星团等级>=1)	
			属性数值=3;
		当前角色对象->技能伤害提升(PC(属性数值));
		if (星团等级==20)	
			当前角色对象->技能伤害提升(PC(5));
	}
	else if (星团类型==失衡_崩离边界武器系列)
	{
		float 属性数值=0.0f;
		if (星团等级>=15)	
			属性数值=7;
		else if (星团等级>=10)	
			属性数值=7;
		else if (星团等级>=5)	
			属性数值=5;
		else if (星团等级>=1)	
			属性数值=3;
		当前角色对象->技能伤害提升(PC(属性数值));
		if (星团等级>=1)
			当前角色对象->暴击增加(PC(5));
		if (星团等级>=15)
			当前角色对象->全属强增加(14);
		if (星团等级==20)
			当前角色对象->技能伤害提升(PC(5));
	}

	//梦境
	float 梦境技攻=当前角色对象->武器梦境等级*PC(1);
	当前角色对象->技能伤害提升(梦境技攻);

	//记忆追溯
	float 记忆技攻=0;
	if (当前角色对象->武器记忆等级<6)
		记忆技攻=当前角色对象->武器记忆等级*PC(1);
	else if (当前角色对象->武器记忆等级==6)
		记忆技攻=PC(10);
	当前角色对象->技能伤害提升(记忆技攻);
	//记忆6的隐藏属性是特效伤害，不计入
}

void DNF武器对象::应用属性()
{
	if (武器系列==吞噬本源武器系列)
	{
		当前角色对象->攻击强化增加(PC(204.8),FALSE);	//升神属性
		当前角色对象->技能伤害提升(PC(49));
		当前角色对象->攻击强化增加(PC(1522.8));
		当前角色对象->技能伤害提升(PC(10));
		当前职业对象->技能等级增加(1,100,1,非觉醒技能);
		if (当前职业对象->职业==职业_流浪武士)
			当前角色对象->光抗增加(10);
	}
	else if (武器系列==胜负之役武器系列)
	{
		//技能相关的属性在职业类内处理
		当前角色对象->攻击强化增加(PC(204.8),FALSE);
		当前角色对象->技能伤害提升(PC(50));
		if (当前职业对象->职业==职业_光明骑士女)
		{
			当前角色对象->攻击强化增加(PC(2199.6));
		}
		else if (当前职业对象->职业==职业_流浪武士)
		{
			当前角色对象->攻击强化增加(PC(2538));
			当前角色对象->技能伤害提升(PC(7));
		}
	}
	else if (武器系列==先驱者的武器系列)
	{
		当前角色对象->攻击强化增加(PC(204.8),FALSE);
		当前角色对象->技能伤害提升(PC(35));
		当前角色对象->攻击强化增加(PC(1353.6));
		当前职业对象->技能等级增加(1,100,2,全部技能);
		当前职业对象->技能攻击力增加(1,100,PC(30),觉醒技能);
		if (当前职业对象->是辅助职业()==FALSE)
			当前职业对象->技能冷却减少(1,100,PC(20),觉醒技能);
	}
	else if (武器系列==怒战之意武器系列)
	{
		当前角色对象->攻击强化增加(PC(204.8),FALSE);
		当前角色对象->技能伤害提升(PC(55));
		当前角色对象->攻击强化增加(PC(2030.4));
		当前角色对象->全属强增加(30);
		if (当前角色对象->装备技能范围>=PC(48))
			当前角色对象->技能伤害提升(PC(8));
	}
	else if (武器系列==冰封之御武器系列)
	{
		当前角色对象->攻击强化增加(PC(204.8),FALSE);
		当前角色对象->技能伤害提升(PC(55));
		当前角色对象->攻击强化增加(PC(1692));
		当前职业对象->技能恢复加快(1,100,PC(40),主动非觉醒技能);
	}
	else if (武器系列==寂灭之信武器系列)
	{
		当前角色对象->攻击强化增加(PC(204.8),FALSE);
		当前角色对象->技能伤害提升(PC(55));
		当前角色对象->攻击强化增加(PC(2030.4));
		当前角色对象->技能伤害提升(PC(10));
	}
	else if (武器系列==领域之主武器系列)
	{
		//传说武器不能升神，没有基础攻强
		当前角色对象->技能伤害提升(PC(50));
		if (当前角色对象->角色装备词条1[武器]->空装备==FALSE)
			当前角色对象->角色装备词条1[武器]->应用属性();
		if (当前角色对象->角色装备词条2[武器]->空装备==FALSE)
			当前角色对象->角色装备词条2[武器]->应用属性();
		if (当前角色对象->角色装备词条3[武器]->空装备==FALSE)
			当前角色对象->角色装备词条3[武器]->应用属性();
		if (当前角色对象->角色装备词条4[武器]->空装备==FALSE)
			当前角色对象->角色装备词条4[武器]->应用属性();
	}
	else
	{
		应用雾神武器属性();
	}

	//辅助属性
	if (武器类型==武器_光杖 && 当前职业对象->是辅助职业())
	{
		if (武器系列==领域之主武器系列)
		{
			当前职业对象->技能等级增加(50,50,4,主动全部技能);
		}
		else if (武器系列==雨_蕴暖之春武器系列)
		{
			当前职业对象->技能等级增加(1,100,2,全部技能);
			当前职业对象->技能等级增加(50,50,4,主动全部技能);
		}
		else
		{
			当前职业对象->技能等级增加(50,50,4,主动全部技能);
			当前角色对象->技能伤害提升(PC(20));
		}
	}
}


